package mysql.version1;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * 版本1--封装【拓展】
 * Mysql工具类配置
 * 1.数据库：地址、用户名、密码、私有属性-----静态化【本类可以直接调用】
 * Oracle与Mysql同时具备--地址、用户名、密码
 * 2.静态方法【本类直接调用】：getParam(String 路径)
 * 目的：使用方法调用外部文件  db_mysql.properties
 * db_mysql.properties  对应 Java Properties类：读取键值对形式信息文件
 * Properties类 提供方法：  load()  读取配置文件信息【键值对-数据库基本信息】
 * 3.通过封装概念--连接成功数据库【通用一个类连接Mysql和Oracle】
 *
 * */
public class Mysql {
  //1.任何数据库具备：地址、用户名、密码----私有静态属性
    private static String url;
    private static String username;
    private static String password;
    //2.静态方法：getParam(String 路径)  链接不同种类数据库，读取数据库信息
    //2.1 配置文件：键值对出现，保存数据库对应的基本信息  xxx.properties

    public static void getParam(String fileName) throws IOException {
      //2.2 Properties类--读取xxx.properties配置文件信息
      Properties p=new Properties();
      // 2.3 外置文件读取-借助IO流--搬运数据--InputStream
      // Mysql.class 表示当前Mysql类的Class对象
      // 理解：图书馆--区域存Mysql相关书籍
      // .getClassLoader()  表示获取当前类的加载器【加载器负责读取配置文件信息】
      // 理解：图书馆--区域存Mysql相关书籍--图书管理员
      // .getResourceAsStream(文件) 表示获取当前加载器当中对应的键值对信息
      // 理解：图书馆--区域存Mysql相关书籍--图书管理员--拿明确的书籍
      InputStream fis=
              Mysql.class.getClassLoader().getResourceAsStream(fileName);

      p.load(fis);
      // 2.4 读取数据库基本信息【url、用户、密码】 赋值给当前对象【url、用户、密码】
      // 读取db_mysql.properties中键
      url=p.getProperty("url");
      username=p.getProperty("username");
      password=p.getProperty("password");
      System.out.println("测试成功："+url+username+password);
    }

  public static void main(String[] args) throws IOException, SQLException {
    // 测试封装概念--连接成功数据库
    Mysql.getParam("db_mysql.properties");
    // 参考Mysql封装，写oracle封装【作业2】
    // 练习：连接成功Mysql----------book表------增加一条记录操作
    //1.创建操作--Connection  代表Java连接成功数据库
    Connection con=DriverManager.getConnection(url,username,password);
    //2.执行sql--Statement   代表Java执行数据 sql
    Statement st=con.createStatement();
    //3.[CRUD操作：增删改 executeUpdate() 查executeQuery]
    String sql="insert into book values(6,'余华','活着','79','2010年',80,'否')";
    // 练习：删和改，以及查
    int rows=st.executeUpdate(sql); // 执行增删改，返回值 int 类型
    System.out.println("成功添加了："+rows+"一条记录");
    //4.关闭连接---Statement--Connection
    st.close();
    con.close();
    }
}
